package com.alan.java7;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousFileChannel;
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.Future;

/**
 * @author Alan
 * @create 2017--04--10--17:24
 */
public class AsyncChannel {
    public static void main(String[] a) throws IOException {
        //定义要打开的文件对应的path
        Path path= Paths.get("E:\\svn\\Alan\\java\\alanUtils\\commonUtils\\src\\main\\java\\com\\alan\\java7\\test.txt");
        //打开一个可以异步读写文件的通道
        AsynchronousFileChannel channel=AsynchronousFileChannel.open(path);
        //通道是基于ByteBuff读写的，所以需要声明一个bytebuff来存储要读写的数据
        ByteBuffer bf= ByteBuffer.allocate(1024);//声明1024个字节的buff
        //从0(文件开头)异步读取文件内容到bf,由于是异步操作，不管文件有没有读取完成，这句代码执行后立刻就会执行后面的代码，通过future可以知道结果
        Future future=channel.read(bf,0);
        System.out.println("文件读取中...");
        //如果文件没有读完，可以继续干些别的事情
        while(!future.isDone()){
            System.out.println("我干别的了，你慢慢读");
        }
        System.out.println("文件读取完成");
        bf.flip();
        //打印bytebuff中的内容
        System.out.println(Charset.forName("utf-8").decode(bf));
        channel.close();
    }


}
